/***
 * 一、简答题
 * 谈谈你是如何理解JS异步编程的，EventLoop、消息队列都是做什么的，什么是宏任务、什么是微任务
 * 
 * 1、js语言执行环境是单线程，它的这种模式就造就了，js一次只能执行一个任务，多个任务就需要排队，也就是说从开始到结束是依次执行，
 *    这种执行模式如果中间有大量数据循环等类似任务的时候，很容易造成阻塞，从而异步编程对于js来时尤为重要。
 *    在这种情况下就产生了回调函数，但是由于嵌套调用很容易造成回调地狱，从而产生了Promise，再到现在的acnyc/await
 * 
 * 2、js在执行的时候会放入一个匿名的调用栈里面，对于同步的任务会直接执行，等同步任务执行完之后，Event Loop监听会起到作用，从消息队列里面
 *    取到任务依次执行，直到消息队列里面没有任务为止，Event Loop才会结束循环。
 * 
 * 3、在js执行过程中会遇到一些同步任务、微任务和宏任务，其中同步任务是直接放在匿名的调用栈里面依次执行，当同步任务执行完成之后，微任务会立即执行，
 *    等到所有的微任务执行完成之后，Event Loop会从消息队列里面依次取出宏任务放入调用栈中执行，直到消息队列里面的任务全部都执行完毕，Event Loop
 *    结束循环。执行顺序为 js同步任务放入调用栈=》微任务=》宏任务放入调用栈，其中如果在执行微任务的时候插入微任务，改微任务也会放到微任务消息
 *    队列里面一起执行，直到所有微任务执行完毕，才会开启Event Loop进行宏任务时间循环。
 * 
 */